TANGERINE ――――――――――――――――――――――――――――――――――――――― Oh!mz 1987年 4月号掲載 S−OS SWORD マシン語 TANGERINE.SOS       08000H−09FFFH S:08000H ソース  TANGERINE.ASC データ  TANGERINE.DAT       09000H−09FFFH 起動方法 TANGERINE.SOSをロード J8000 *マシン語はゲームとデータが1つになっています  マシン語はダンプリストと同じで余分なデータもありますが  ゲームには関係ありません ――――――――――――――――――――――――――――――――――――――― 全機種共通システムにアクショングームの代名詞ともいえる、 スクロール型シューティングゲームの登場です。 スピード変更モードもあり、 マップの拡張も簡単にできるようになっています。 自分流に改造して楽しんでみてはいかがでしょうか。 ・――――――― |■                | |     横スクロールだ     | |                ■|           ――――――――・ あるところに、とても平和な国がありました。 この国はマーマレード色の空、川辺には色とりどりの花が咲き、 橋のたもとでは人々が微笑んでいる……、 それはもう素晴しい国でした。 ところがある日、この国の命ともいうべき “TANGERINE TREE”が 隣の国の者に盗まれてしまったのです。 とたんにこの国は光を失い、 人々は不安におびえ始めました。 ついにひとりの若者が立ち上がり、 この国の伝説の乗り物“LUCY”に乗って 失われた“TANGERINE TREE”を取り戻すべく 旅立ったのでした。 グラディウスでおなじみの横スクロール型シューティングゲームです。 名前は「タンジェリン」とお呼びください。 このゲームはこのままの形でも楽しめますが、 データ部分を簡単に変更できますので、 オリジナルのマップを拡張して よりいっそうゲームの世界を広げてみてください。 ・――――――― |■                | |     入力・操作方法     | |                ■|           ――――――――・ リスト1はメインプログラムです。 8000HからMACINTO−Cなどの マシン語入力ツールから打ち込んでください。 打ち終わったら セーブしてチェックサムをよく確認してください。 リスト2はデータ部分です。 入力法はリスト1と同様ですが、 とりあえずプログラムの動作を確認したいという場合には、 適当なところまでダンプリストを打ち込み、 待ち時間のところをFFHとしたデータを末尾に加えて テストランさせることも可能です。 今回のプログラムでは7面分のデータを用意してあります。 メインプログラムと一緒にまとめてセーブしておくとよいでしょう。 ゲームの実行はJ8000です。 自分で拡張したデータがある場合などは HLレジスタにデータの格納アドレスをセットすれば、 J8003として開始することもできます。 あるいは、データアドレスを8001H、8002H番地に 登録しておいてJ88000としてもかまいません。 操作はテンキー、カーソルキー、 及びSキーを中心としたキーで自機の移動、 5、S、スペース、リターンキーでミサイルを発射します。 それぞれの機種で使いやすいものを使用してください。 機体は4面ごとに1機増え、 全機破壊されるとゲームオーバーです。 スピードはX1を基準に設定してありますが、 機種や好みに応じて変更することができます。 タイトル両面でSキーを押すとスピード変更モードに入ります。 カーソルキーで選択しリターンキーで決定します。 このときスペースキーを押すと(アスタリスクを表示)ダミーの 待ち時間がなくなり高速になりますが、 スピードが一定しなくなってしまいます。 また、86C3HのIDATAWの部分を 直接書き換えることでも調整が可能です。 スピードを速くしたい場合は値を小さく、 遅くしたい場合は大きくしてください。 そのほか、自機の数は86C2H番地に格納されています。 ご自由に変更してみてください。 ・――――――― |■                | |      データ形式      | |                ■|           ――――――――・ 9000H以降はデータエリアです。 ここのデータは敵キャラや障害物の出現順に飛行パターンなどの 4個のデータで構成されており、順に、 1)待ち時間:前のキャラクターが出現してから        次のキャラクターを表示するまでの時間 2)出現位置:Y座標で指定(1〜19) 3)敵キャラ:1文字のアスキーコードで指定 4)敵の動き:1……直進        2……斜め上        3……斜め下        1〜3が基本パターン、        これらに3を加えると速度が2倍になる のように指定します。 データ中には00H及びFFHを使用してはいけません。 00Hは各面の終わりを表し、 FFHは全面の終わりを示すのに使われています。 1)のデータでは1を指定すると待ち時間なしとなります。 また、当然ながら3)のデータとして コントロールコードを使用することはできません。 敵キャラクターは常に右方向から現れて、 それぞれの方向に直線的な動きをします。 上端、下端までいくと 方向を変えるという単純なパターンですが、 速度を変えたり、組み合わせを工夫することで 多彩なコンビネーション攻撃が可能です。 自分でデータを作るときは上記の形式に従って、 1キャラクターにつき4バイトのデータを キャラクターの出現する順番に並べていきます。 各面の区切りには00Hを、 全データの終わりにはFFHを置いてください。 いきなり入力してもよいのですが 一度紙の上でパターンを検討してからのほうがよいでしょう。 なお、一度に画面に表示される敵の数は 一応50個までに制限してあります。 ・――――――― |■                | |    プログラムについて    | |                ■|           ――――――――・ このプログラムでは両面の読み出しルーチンを一切使用せず、 衝突判定などはすべてワークエリア上で処理しています。 主なルーチンについて解説してみましょう。 SCROLL: これは画面の下側にある山の部分を スクロールさせているルーチンです。 山のデータは図1のような3バイトで表されています。 まず、いちばん上段のデータを読み、 ローテイトしながらビットが0ならスペース、 1なら山のデータを書いていきます。 これを5回繰り返して1段分のできあがり、 あとは同様に中段、下段のデータを書いていきます。 次回に山を表示する前にもう一度余分にローテイトしてやれば、 山は左にスクロールしていくわけです。      ・−−−−−−・       \    / ・−−−図1 山の部分のデータ−−−・ |       \/        | |  00001000 :08H  | |  00011100 :1CH  | |  00111110 :3EH  | |                 | ・−−−−−−−−−−−−−−−−−・ TEKI: 敵キャラクターの移動ルーチンです。 敵のワークエリアを調べ、キャラクターを移動します。 もちろん衝突判定も行っています。 当たった相手が飛行機なら、 メインフラグ(自機)はDEADとなります。 ミサイルなら敵キャラクターのフラグが0となり、 敵キャラクターのガーベジコレクションが行われます。 これは敵キャラクターを出てきた順番に 画面に出現させるようにして不要な混乱を避けるためです。 こうして、ひととおり敵キャラクターを移動させると、 次のキャラクターの待ち時間を1引いて、 0であればめでたく敵出現、 引く前にすでに0であれば1面クリアとなります。 MSIL: ミサイルのワークエリアから生きているミサイルを探し出し、 移動させ衝突判定をするルーチンです。 このとき、スペースキーなどが押されていれば 新たなミサイルが発射されます。 一連の処理のなかでこのルーチンが2度CALLされているのは、 ミサイルを自機の2倍の速度で移動させるためです。 ・――――――― |■                | |       最後に       | |                ■|           ――――――――・ 2月号のアドベンチャーゲームMARMALADEで予告したとおり、 今回はS−OS用のアクショングームです。 もともと、このプログラムはS−OSでは アクショングームはむずかしいということで あえて挑戦してみたものです。 相変わらずリアルなキャラクターだとか スムーススクロールという 時代の流れに逆行するような画面でごめんなさい。 これだけの数のキャラクターを扱ったのは初めてですが、 さすがにマシン語は速いです。 Z80は強力です。 このプログラムではS−OSの共通ルーチンしか使用せず、 速度には少し不安があったのですが、 結局ウェイトをかけなければならない速度になってしまいました。 これからS−OSでアクショングームを作ろうという人にひと言、 大丈夫です。 S−OSでも十分アクショングームを作ることができます。 自信を持ってがんばってください。